iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0

在今天的文章中,我們將一起探索 Docker容器化技術 (Containerization),這些技術正在重新定義應用程式的開發和佈署流程。隨著雲端運算的興起,傳統的應用佈署方式面臨許多挑戰,而容器化則提供了一種靈活且高效的解決方案,幫助開發團隊快速構建、測試和佈署應用程式。


容器化的概念

容器化是一種將應用程式及其依賴項封裝在一起的技術。這樣做的好處包括:

  • 獨立性:容器彼此獨立運行,避免了相互干擾,減少環境問題的發生。
  • 可攜性:容器可以在不同環境中運行,無需重新配置,極大地提高了靈活性。
  • 可管理性:容器的生命週期管理變得更加方便,可以輕鬆啟動、停止和更新。

什麼是 Docker?

Docker 是一個開源的容器化平台,允許開發者將應用程式及其所有依賴項打包成輕量級的容器。這些容器可以在任何支持 Docker 的環境中運行,無論是開發、測試還是生產環境。

Docker 的核心思想是利用容器來隔離應用程式及其運行環境。容器是一個獨立的執行環境,包含了應用程式所需的所有庫、依賴項和配置,並能在任何支持 Docker 的操作系統上運行。以下是 Docker 的一些基本概念:

  1. 映像 (Image)
    • Docker 映像是一個模板,用於創建容器,包含應用程式及其所有依賴項(Dependencies)。使用 Dockerfile 可以自動化映像的創建過程。
  2. 容器 (Container)
    • 容器是一種輕量級的虛擬化技術,每個容器都是從映像(Image)創建的,確保在任何環境中都能一致運行。映像包含了執行應用所需的所有內容,使得容器啟動更快,佔用資源更少,非常適合微服務架構和快速開發部署。可以輕鬆啟動、停止、刪除或重新部署。
  3. Docker Hub
    • Docker Hub 是 Docker 的官方映像庫,用戶可以在這裡分享、發佈和下載 Docker 映像。它提供了大量現成的應用程式映像,方便開發者快速開始使用。
  4. Dockerfile
    • Dockerfile 是用來定義 Docker 映像的文本文件,包含了一系列指令,告訴 Docker 如何構建映像,包括從哪個基礎映像開始、安裝哪些依賴、執行哪些命令等。

為什麼選擇 Docker?

  1. 一致性:Docker 確保應用程式在不同環境中保持一致,無論是在開發機、測試環境還是生產環境,都能確保應用程式的行為相同,避免 "It Works On My Machine (它在我的電腦上執行正常)" 的問題。
  2. 輕量級:相較於虛擬機,Docker 容器更輕量,啟動速度快,資源佔用更少,能夠在同一硬體資源上運行更多的應用程式。
  3. 擴展性:Docker 容器可以輕鬆地在不同的伺服器上進行擴展,支援微服務架構,提升應用程式的開發與維護效率,能夠根據需求快速增加或減少容器數量。
  4. 資源隔離:Docker 容器之間相互隔離,能在同一台伺服器上運行多個應用程式而不會互相干擾。
  5. 版本控制:Docker 映像的版本控制允許開發者追蹤變更,隨時回退到先前的版本,確保應用程式的穩定性。

https://ithelp.ithome.com.tw/upload/images/20240922/20169492wMgqebUEpM.png
圖片來源
綜上所述,我們可以發現,Docker 優於虛擬機(VM)的其中一個原因是其啟動速度更快,容器通常在幾秒鐘內就能啟動,而虛擬機則需要幾分鐘來啟動完整的作業系統。再者,Docker 的資源佔用更少,因為容器共享主機的作業系統,而虛擬機需要為每個實例運行完整的作業系統,導致更高的開銷。最後,Docker 的可攜性使得應用在不同環境間部署更為簡單,因為容器映像可以在任何支援 Docker 的平台上運行,無需考慮底層環境的差異。


如何使用 Docker?

安裝 Docker

首先,我們需要在系統上安裝 Docker。根據不同的作業系統,安裝方式略有不同,可以參考官方文件進行安裝。


Dockerfile

Dockerfile 是一個文本文件,其中包含創建 Docker 映像所需的所有指令。透過 Dockerfile,我們可以定義應用程式的環境、安裝依賴和配置啟動命令。

基本的 Dockerfile 示例:

# 使用 Python 3.9 的官方映像作為基礎映像
FROM python:3.9

# 設定工作目錄
WORKDIR /app

# 複製 requirements.txt 檔案到容器中
COPY requirements.txt .

# 安裝應用所需的依賴
RUN pip install --no-cache-dir -r requirements.txt

# 複製應用程式檔案到容器中
COPY . .

# 設定容器啟動時執行的命令
CMD ["python", "app.py"]

創建並運行容器

安裝完成後,我們可以使用以下命令來創建並運行容器:

# 構建映像
docker build -t myapp .

# 運行容器
docker run -d -p 5000:5000 myapp

這裡,-t 參數用來標記映像名稱,-d 參數表示以分離模式運行容器,-p 參數用來映射主機和容器的端口(通訊埠,port)。

  • 前面的 5000:這是 Docker 主機(即運行 Docker 的電腦)上暴露的端口。
  • 後面的 5000:這是容器內部的端口。這是應用程序在容器內運行的端口。

簡單來說,這個命令將主機的 5000 端口映射到容器內的 5000 端口,當外部請求進入這台電腦的 5000 端口時,請求會被轉發到容器內的 5000 端口,來與容器內的應用進行互動。


結語

今天我們了解了 Docker 的基本概念及其在容器化應用程式中的重要性。隨著微服務架構的普及,容器化技術將成為 DevOps 實踐中不可或缺的一部分。透過容器,我們能夠在不同環境中保持一致性,提升佈署效率。

https://ithelp.ithome.com.tw/upload/images/20240922/20169492jnyoVqmZyQ.jpg
圖片來源

預告

明天我們將進一步探討如何運用 Docker 實現更加自動化和靈活的應用佈署策略~


參考文件


上一篇
Day07 - 使用 YAML 定義 Pipeline: 條件邏輯與變數的應用
下一篇
Day09 - DevOps 測試自動化:多階段測試的兩種概念
系列文
DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言